def find_min_index_ge_x(arr, x):
    """
    查找数组中第一个大于等于x的元素的最小索引
    :param arr: 已排序的数组
    :param x: 目标值
    :return: 最小索引，若不存在返回-1
    """
    if not arr:
        return -1
    left, right = 0, len(arr) - 1
    while left <= right:
        mid = (left + right) // 2
        if arr[mid] >= x:
            right = mid - 1
        else:
            left = mid + 1
    return left if left < len(arr) else -1


def find_max_index_le_x(arr, x):
    """
    查找数组中最后一个小于等于x的元素的最大索引
    :param arr: 已排序的数组
    :param x: 目标值
    :return: 最大索引，若不存在返回-1
    """
    if not arr:
        return -1
    left, right = 0, len(arr) - 1
    while left <= right:
        mid = (left + right) // 2
        if arr[mid] <= x:
            left = mid + 1
        else:
            right = mid - 1
    return right if right >= 0 else -1


# 示例测试
if __name__ == "__main__":
    test_arr = [1, 4, 4, 7, 9]
    print(find_min_index_ge_x(test_arr, 4))  # 输出: 2
    print(find_max_index_le_x(test_arr, 6))  # 输出: 3
    print(find_min_index_ge_x(test_arr, 10))  # 输出: -1
    print(find_max_index_le_x(test_arr, 0))  # 输出: -1
